Info o padu aplikace

Otázka od: L?ikola Petr

2. 6. 2004 7:41

Zdravim konferenci,
mam program, ktery v IDE bezi naprosto vporadku, ale pokud ho spustim z exe tak
obcas padne. Potreboval bych nejakym zpusobem zjistit proc aplikace spadla a
nejlepe v jakem miste programu (v jake procedure). Nekde jsem neco zaslechl ,
ze je na to neco v jedi, ale nevim jak to a co mam pouzit.. Samozdrejme bych
kvuli tomu odladeni chtel delat co nejmensi zasahy do programu.

Zkusenosti s takovymto ladenim nemam zadne, tak bzch prosil o nejako podrobny
postup, kde co a jak.

Diky za info

S pozdravem petr Sikola
D5E, WXP, MSSQL2000


Odpovedá: Bohac Frantisek

2. 6. 2004 8:43

Ahoj,

muzes si do aplikace vlozit Exception Dialog (File-New-Other..zalozka
Dialogs), pokud mas instalovane JVCL.

Pri vyjimce se vyvola tento dialog a zobrazi info o tom, kde je chyba.

Aby jsi dostal kompletni vypis, je treba nechat generovat .map file (Project
Options-Linker) a ten pridavat k aplikaci.

S pozdravem

Frantisek Bohac


----- Original Message -----
From: "L?ikola Petr" <developer@efg.cz>


> Potreboval bych nejakym zpusobem zjistit proc aplikace spadla
> a nejlepe v jakem miste programu (v jake procedure).



Odpovedá: Petr Brant

2. 6. 2004 8:30

Osvedcilo se mi pouzit exceptdlg z JCL. Staci to dat do uses na prvni misto
v DPR, nastavit linker, aby generoval MAP soubor a uvidis primo nazev unitu
a cislo radku, kde to zbuchlo. A i jine veci - info o operacnim systemu,
natazenych modulech apod. Skvela vec od Petra Vonese. Ja jsem si to jeste
upravil, aby mi to chybovy log poslalo mailem.

Priklad zacatku takoveho vypisu:

Trida vyjimky: EOleException
Adresa vyjimky: 004DB2D3
----------------------------------------------------------------------------
----
Stav zasobniku 9.5.2003 12:03:11
[004DB2D3] MapPointOleContainer.TMapPointOleContainer.AddPointToTrace (Line
282, "MapPointOleContainer.pas" + 7) + $30
[00463D40] ComObj.SafeCallError + $F0
[00406DF3] System.@CheckAutoResult + $13

Zdravim

RNDr. Petr Brant [brant@dcomm.cz]
http://web.redbox.cz/petr.brant

D&COMM s.r.o.
Korunovacni 6
Praha 7
tel. +420724007234


 mam program, ktery v IDE bezi naprosto vporadku, ale pokud ho
spustim z exe tak obcas padne. Potreboval bych nejakym zpusobem zjistit proc
aplikace spadla a nejlepe v jakem miste programu (v jake procedure).

Odpovedá: Karolina Nemanska

2. 6. 2004 10:21

Skvela vec!
Ale jedno by me zajimalo - pokud nedam k programu .map soubor a necham si ho
jen sama pro sebe - lze pak zpetne ziskat z adres stejny report, jako kdyby
byl .map u souboru - rucne nebo nejakym programem? Protoze .map je jednak
dost velky a druhak bych nerada, aby kazdy videl, jak pojmenovavam
komponenty ,-)

Diky, K.

----- Original Message -----
From: "Bohac Frantisek" <bohacf@vnol.cz>
To: <delphi-l@clexpert.cz>
Sent: Wednesday, June 02, 2004 8:47 AM
Subject: Re: Info o padu aplikace


> Ahoj,
>
> muzes si do aplikace vlozit Exception Dialog (File-New-Other..zalozka
> Dialogs), pokud mas instalovane JVCL.
>
> Pri vyjimce se vyvola tento dialog a zobrazi info o tom, kde je chyba.
>
> Aby jsi dostal kompletni vypis, je treba nechat generovat .map file
(Project
> Options-Linker) a ten pridavat k aplikaci.
>
> S pozdravem
>
> Frantisek Bohac


Odpovedá: L?ikola Petr

2. 6. 2004 10:42

No laboroval jsem s tim, ale bohuzel nic (na klasicke vyjimky to funguje), asi
jsem zapomel dodat, ze aplikace nehodi zadnou vyjimku, proste padne.. A jeste
ze aplikace je vicevlaknova s pristupem na databazi.

Petr Sikola


Odpovedá: Petr Vones

2. 6. 2004 12:55

From: "Karolina Nemanska" <lafidek@seznam.cz>
> Ale jedno by me zajimalo - pokud nedam k programu .map soubor a necham si ho
> jen sama pro sebe - lze pak zpetne ziskat z adres stejny report, jako kdyby
> byl .map u souboru - rucne nebo nejakym programem? Protoze .map je jednak

Ne, misto MAP souboru muzes pouzit JDBG soubor (komprimovany MAP, cca 12%
puvodni velikosti) nebo tyto data vlozit primo do EXE souboru pomoci IDE
experta nebo MAKEJCLDBG command-line utility.

> dost velky a druhak bych nerada, aby kazdy videl, jak pojmenovavam
> komponenty ,-)

To je videt i z DFM souboru v resource  

Petr Vones


Odpovedá: Petr Vones

2. 6. 2004 12:46

From: "L?ikola Petr" <developer@efg.cz>
> No laboroval jsem s tim, ale bohuzel nic (na klasicke vyjimky to funguje),
> asi jsem zapomel dodat, ze aplikace nehodi zadnou vyjimku, proste padne.. A
> jeste ze aplikace je vicevlaknova s pristupem na databazi.

V jake verzi Delphi ? To vypada na neosetrenou vyjimku v threadu.

Petr Vones


Odpovedá: Karolina Nemanska

2. 6. 2004 13:06

Kdyz uz se o tom bavite - jak odladovat thready? lze nejak zpracovavat
vyjimky v nich podobne jako v mainthreadu, tj. aby vyskocil nejaky dialog +
odeslani na mail?

K.

----- Original Message -----
From: "Petr Vones" <pvones@vol.cz>
To: <delphi-l@clexpert.cz>
Sent: Wednesday, June 02, 2004 1:00 PM
Subject: Re: Info o padu aplikace


> From: "L?ikola Petr" <developer@efg.cz>
> > No laboroval jsem s tim, ale bohuzel nic (na klasicke vyjimky to
funguje),
> > asi jsem zapomel dodat, ze aplikace nehodi zadnou vyjimku, proste
padne.. A
> > jeste ze aplikace je vicevlaknova s pristupem na databazi.
>
> V jake verzi Delphi ? To vypada na neosetrenou vyjimku v threadu.
>
> Petr Vones
>
>
>
>


Odpovedá: delphin@post.cz

2. 6. 2004 15:39

> Kdyz uz se o tom bavite - jak odladovat thready? lze nejak zpracovavat
> vyjimky v nich podobne jako v mainthreadu, tj. aby vyskocil nejaky dialog
+
> odeslani na mail?

Vyjimky ve vlaknech jde dobre analyzovat v TThread.DoTerminate.


Odpovedá: Petr Vones

4. 6. 2004 10:42

From: "Karolina Nemanska" <lafidek@seznam.cz>
> Kdyz uz se o tom bavite - jak odladovat thready? lze nejak zpracovavat
> vyjimky v nich podobne jako v mainthreadu, tj. aby vyskocil nejaky dialog +
> odeslani na mail?

Daji, dokonce je to udelane i v JCL (i kdyz tohle se zrovna prilis nepovedlo).
Problem je ale v tom, ze interakce s uzivatelem pri vyjimce v threadu neni
zrovna stastne reseni, zvlaste v pripade kdyz vzniknou vyjimky ve vice
threadech najednou. Kazde takove zobrazeni dialogu je nutne synchronizovat s
hlavnim threadem coz zbytecne blokuje beh aplikace.

Lepsim resenim je ukladat vyjimky do nejakeho souboru a z neho pak provest
souhrnny report napriklad pri dalsim spusteni aplikace nebo jinou samostatnou
aplikaci k tomu ucelu zhotovenou. Tady se ale asi neda poradit nejake zcela
univerzalni reseni, to totiz zalezi na dane aplikaci. Nicmene s pouzitim
JclDebug je mozne si takovou vec napsat dle vlastnich pozadavku.

Petr Vones